<?php

namespace JsonLowCode\UI;

use JsonLowCode\Schema;
use JsonLowCode\Traits\Props\HasDefaultValue;
use JsonLowCode\Traits\Props\HasDisabled;
use JsonLowCode\Traits\Props\HasLoading;
use JsonLowCode\Traits\Props\HasRound;
use JsonLowCode\Traits\Props\HasSize;
use JsonLowCode\Traits\Slots\HasSlotIcon;

/**
 * NSwitch 开关组件
 * @method static NSwitch make(string|int $value = null) NSwitch组件
 */
class NSwitch extends Schema
{
    protected string $componentName = "NSwitch";

    use HasRound, HasDisabled, HasSize, HasDefaultValue, HasLoading;

    use HasSlotIcon;

    /**
     * @param string|int|null $value
     */
    public function __construct(string|int $value = null)
    {
        parent::__construct();
        $this->prop('value', $value);
    }

    /**
     * 选中时对应的值
     * @param string|bool|int $value
     * @return $this
     */
    public function checkedValue(string|bool|int $value = null): static
    {
        return $this->prop('checkedValue', $value);
    }

    /**
     * 按钮是否有橡皮筋效果
     * @param bool|string $bool
     * @return $this
     */
    public function rubberBand(bool|string $bool = true): static
    {
        return $this->prop('rubberBand', $bool);
    }

    /**
     * 未选中时对应的值
     * @param string|bool|int $value
     * @return $this
     */
    public function uncheckedValue(string|bool|int $value = null): static
    {
        return $this->prop('uncheckedValue', $value);
    }

    /**
     * 创建轨道样式的函数
     * @param string $event (info: { focused: boolean, checked: boolean }) => (CSSProperties | string)
     * @return $this
     */
    public function railStyle(string $event = "(info) => {}"): static
    {
        return $this->events('railStyle', $event);
    }

    /**
     * 发生变化时触发的回调方法
     * @param string $event (value: number) => void
     * @return $this
     */
    public function onUpdateValue(string $event = "(value) => {}"): static
    {
        return $this->events('onUpdate:value', $event);
    }

    /**
     * 设置 slot checked 内容
     * @param mixed $slot 是否是js表达式
     * @param array $params
     * @return $this
     */
    public function slotChecked(mixed $slot, array $params = []): static
    {
        return $this->slot('checked', $slot,$params);
    }

    /**
     * 设置 slot checkedIcon 内容
     * @param mixed $slot 是否是js表达式
     * @param array $params
     * @return $this
     */
    public function slotCheckedIcon(mixed $slot, array $params = []): static
    {
        return $this->slot('checkedIcon', $slot,$params);
    }

    /**
     * 设置 slot unchecked 内容
     * @param mixed $slot 是否是js表达式
     * @param array $params
     * @return $this
     */
    public function slotUnchecked(mixed $slot, array $params = []): static
    {
        return $this->slot('unchecked', $slot,$params);
    }

    /**
     * 设置 slot uncheckedIcon 内容
     * @param mixed $slot 是否是js表达式
     * @param array $params
     * @return $this
     */
    public function slotUncheckedIcon(mixed $slot, array $params = []): static
    {
        return $this->slot('uncheckedIcon', $slot,$params);
    }


}
